home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / source / term43-source.lha / Extras / Source / gtlayout-Source.lha / LTP_PlaceGroups.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-30  |  2.1 KB  |  98 lines

  1. /*  GadTools layout toolkit
  2. **
  3. **  Copyright © 1993-1994 by Olaf `Olsen' Barthel
  4. **  Freely distributable.
  5. */
  6.  
  7. #include "gtlayout_global.h"
  8.  
  9. VOID __regargs
  10. LTP_PlaceGroups(LayoutHandle *handle,ObjectNode *group,LONG left,LONG top)
  11. {
  12.     if(!handle -> Failed)
  13.     {
  14.         ObjectNode    *node;
  15.         LONG         plusLeft,
  16.                  plusTop,
  17.                  lastSpace;
  18.  
  19.         if(group -> Label || group -> Special . Group . Frame)
  20.         {
  21.             plusLeft = 4 + handle -> GlyphWidth + handle -> InterWidth + group -> Special . Group . ExtraLeft;
  22.  
  23.             if(group -> Label)
  24.                 plusTop = handle -> RPort . TxHeight + handle -> InterHeight + group -> Special . Group . ExtraTop;
  25.             else
  26.                 plusTop = 2 + handle -> InterHeight + group -> Special . Group . ExtraTop;
  27.         }
  28.         else
  29.         {
  30.             plusLeft    = group -> Special . Group . ExtraLeft;
  31.             plusTop     = group -> Special . Group . ExtraTop;
  32.         }
  33.  
  34.         if(group -> ExtraSpace)
  35.         {
  36.             if(group -> Special . Group . ParentGroup -> Special . Group . Horizontal)
  37.                 left += handle -> InterWidth;
  38.             else
  39.                 top += handle -> InterHeight;
  40.         }
  41.  
  42.         group -> Left    = left;
  43.         group -> Top    = top;
  44.  
  45.         left    += plusLeft;
  46.         top    += plusTop;
  47.  
  48.         if(group -> Special . Group . Horizontal)
  49.         {
  50.             lastSpace = left;
  51.  
  52.             SCANGROUP(group,node)
  53.             {
  54.                 if(node -> Type == GROUP_KIND)
  55.                     LTP_PlaceGroups(handle,node,lastSpace,top);
  56.                 else
  57.                 {
  58.                     node -> Left    += left;
  59.                     node -> Top    += top;
  60.  
  61.                     handle -> Count++;
  62.                 }
  63.  
  64.                 if(!group -> Special . Group . Paging)
  65.                 {
  66.                     lastSpace = node -> Left + node -> Width + handle -> InterWidth;
  67.  
  68.                     if(node -> Type == MX_KIND)
  69.                     {
  70.                         if((node -> LabelPlace == PLACETEXT_RIGHT) || (node -> LabelPlace == PLACETEXT_LEFT))
  71.                             lastSpace += INTERWIDTH + node -> Special . Radio . LabelWidth;
  72.                     }
  73.                 }
  74.             }
  75.         }
  76.         else
  77.         {
  78.             lastSpace = top;
  79.  
  80.             SCANGROUP(group,node)
  81.             {
  82.                 if(node -> Type == GROUP_KIND)
  83.                     LTP_PlaceGroups(handle,node,left,lastSpace);
  84.                 else
  85.                 {
  86.                     node -> Left    += left;
  87.                     node -> Top    += top;
  88.  
  89.                     handle -> Count++;
  90.                 }
  91.  
  92.                 if(!group -> Special . Group . Paging)
  93.                     lastSpace = node -> Top + node -> Height + handle -> InterHeight;
  94.             }
  95.         }
  96.     }
  97. }
  98.